//
// Created by Cammy on 2024/4/26.
//

#ifndef C_DATASTRUCT_DEQUEUE_H
#define C_DATASTRUCT_DEQUEUE_H

/**
 * 队列：只允许在一端进行插入数据操作，在另一端进行删除数据操作的特殊线性表，队列是先进先出的FIFO(FIRST IN FIRST OUT)
 * 入队列：进行插入操作的一端称为队尾
 * 出队列：进行删除操作的一端称为队头
 */

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <malloc.h>
#include <assert.h>

typedef int QDataType;

typedef struct QueueNode {
    QDataType data;
    struct QueueNode *next;
} QNode;

typedef struct Queue {
    QNode *head;
    QNode *tail;
} Queue;

void QueueInit(Queue *pq);

void QueueDestroy(Queue *pq);

// 队尾入
void QueuePush(Queue *pq, QDataType x);

// 队头出
void QueuePop(Queue *pq);

//取队头
QDataType QueueFront(Queue *pq);

//取队尾
QDataType QueueBack(Queue *pq);

int QueueSize(Queue *pq);

bool QueueEmpty(Queue *pq);

#endif //C_DATASTRUCT_DEQUEUE_H
